package top.jybill.utils;

import org.apache.commons.lang3.ArrayUtils;

import java.lang.reflect.Field;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * JavaBean工具
 */
public class BeanUtil {

  /**
   * 检测需要的属性是否有值, 有值true
   */
  public static boolean exComplete(Object obj, String... str) {
    try {
      for (Field field : obj.getClass().getDeclaredFields()) {
        String fieldName = field.getName();

        // 指定排除的字段
        if (ArrayUtils.contains(str, fieldName)) {
          continue;
        }

        field.setAccessible(true); // 允许访问private修饰的
        Object val = field.get(obj); // 属性的值
        if (!check(val)) { return false; }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }

    return true;
  }

  /**
   * 检测需要的属性是否有值, 指定的属性全部有值true
   */
  public static boolean isComplete(Object obj, String... str) {
    try {
      for (Field field : obj.getClass().getDeclaredFields()) {
        field.setAccessible(true); // 允许访问private修饰的

        String fieldName = field.getName();
        Object val = field.get(obj);

        // 非指定字段
        if (!ArrayUtils.contains(str, fieldName)) {
          continue;
        }
        // 检验完整
        if (!check(val)) { return false; }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }

    return true;
  }

  /**
   * 通过为true 不对为false
   * @param val
   * @return
   */
  public static boolean check(Object val) {
    if (val == null) {
      return false;
    }else if (val instanceof String &&
            (null == val || "".equals(val))) {
      return false;
    }
    return true;
  }

  public static void main(String[] args) throws Exception {
//    Product product = new Product();
//    product.setCityName("武汉");
//    product.setProductDesc("非常好玩");
//    product.setProductName("光谷一日游");
//    product.setProductStatus(1);
//    product.setProductNum("jybill-001");
//    System.out.println(isComplete(product, "cityName", "productStatus", "productNum"));
//    System.out.println(exComplete(product, "departureTime", "id", "productPrice"));
  }
}
